package com.shangxia.monomer.common.util;

import java.util.Arrays;

/**
 * @author zhouya38158
 * @Package com.shangxia.monomer.common.util
 * @date 2021/7/21 16:00
 */
public class ArrayUtil {
    public static void main(String[] args) {
        int[] arr = {2, 3, 5, 7, 9, 4, 1, 8, 6};
        System.out.println(findMax(arr));
        System.out.println(findMin(arr));
    }

    /**
     * 数组合并
     *
     * @param first
     * @param second
     * @param <T>
     * @return
     */
    public static <T> T[] arrayConcat(T[] first, T[] second) {
        T[] result = Arrays.copyOf(first, first.length + second.length);
        System.arraycopy(second, 0, result, first.length, second.length);
        return result;
    }

    /**
     * 数组合并
     *
     * @param first
     * @param rest
     * @param <T>
     * @return
     */
    public static <T> T[] arrayConcatN(T[] first, T[]... rest) {
        int totalLength = first.length;
        for (T[] array : rest) {
            totalLength += array.length;
        }
        T[] result = Arrays.copyOf(first, totalLength);
        int offset = first.length;
        for (T[] array : rest) {
            System.arraycopy(array, 0, result, offset, array.length);
            offset += array.length;
        }
        return result;
    }

    /**
     * 检查数组的所有元素是否相等
     *
     * @param arr
     * @param <T>
     * @return
     */
    public static <T> boolean allEqual(T[] arr) {
        return Arrays.stream(arr).distinct().count() == 1;
    }

    /**
     * 从数组中查找最大整数
     *
     * @param arr
     * @return
     */
    public static int findMax(int[] arr) {
        return Arrays.stream(arr).reduce(Integer.MIN_VALUE, Integer::max);
    }

    /**
     * 从数组中查找最小整数
     *
     * @param arr
     * @return
     */
    public static int findMin(int[] arr) {
        return Arrays.stream(arr).reduce(Integer.MAX_VALUE, Integer::min);
    }
}
